package writtenTraining.day13;

import java.util.*;

/**
 * day13:(1)模拟：牛牛冲钻五
 */
public class Main {
    public static void main(String[] args) {
//         模拟
        
        // 输入数据
        Scanner in  = new Scanner(System.in);
        int T = in.nextInt();
        
        while(T-- > 0) {
            int count = 0;
            int n = in.nextInt(), k = in.nextInt();
            long ret = 0;
            char[] process = in.next().toCharArray();
            for(int i = 0; i < n; i++) {
//                 如果比赛赢了
                if(process[i] == 'W') {
                    count++;
                    if(count >= 3) {
                        ret += k;
                    } else {
                        ret++;
                    }
                } else if(process[i] == 'L') {
//                     如果比赛输了
                    count = 0;
                    ret--; 
                }
            }
            
//             输出结果
            System.out.println(ret);
        }
    }
}


/**
 * day13：(2)哈希+滑动窗口：NC41 最长无重复子数组
 */

 class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int maxLength (int[] arr) {
        // write code here
        // 滑动窗口
        int ret = 0;
        Map<Integer,Integer> map =new HashMap<>();
        map.put(arr[0],0);

        for(int  right = 1 , left = 0; right < arr.length; right++) {
            // 更新结果
            if(map.containsKey(arr[right])) {
                System.out.println("right: " + right);
                ret = Math.max(ret,right - left);
                int end = map.get(arr[right]);
                while(left <= end) {
                    map.remove(arr[left]);
                    left++;
                }
            }
            // 入窗口 并且出窗口
            map.put(arr[right],right);
        }
        return  Math.max(ret, map.size());
    }

}


/**
 * day13:(3) 模拟 + 错位填格 + 哈希:重排字符串
 */


 class Main1 {
    public static void main(String[] args) {
//         模拟 + 错位填格 + 哈希

        // 输入数据
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        char[] str = in.next().toCharArray();
//         哈希统计
        int[] hash = new int[26];
        int maxCount = 0;
        char maxCh = '0';
        for(char ch : str) {
            hash[ch - 'a']++;
//             更新最大长度 和 保存最大的值
            if(hash[ch - 'a'] >  maxCount) {
                maxCount = hash[ch - 'a'];
                maxCh = ch;
            }
        }

        char[] ret = new char[n];
        // 不能成立判断
//         占据整个的一半还多就重排
        if(maxCount > (n  + 1) / 2) {
            System.out.println("no");
        } else {
            int pos = 0;
            // 从偶数项开始填大的数
            while(hash[maxCh - 'a'] > 0) {
                ret[pos] = maxCh;
                pos += 2;
                hash[maxCh - 'a']--;
            }

            if(pos >= n) {
                pos = 1;
            }

//             赋值剩下的字符
            for(int i = 0; i < 26; i++) {
                char ch = (char)(i + 'a');

                while(hash[i] > 0) {
                    if(pos >= n) {
                        pos = 1;
                    }
                    ret[pos] = ch;

                    hash[i]--;
                    pos += 2;
                }
            }

//             输出结果
            System.out.println("yes");
            for(int i =0; i < n; i++) {
                System.out.print(ret[i]);
            }
        }
    }
}